'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.03
 * lastUpdateDate：2018.02.03
 * description：let / const的基本用法和区别
 */

/**
  * 1.var是属于函数级别作用域变量的声明，它是会提升到整个函数级别之上或全局的
  * 2.let是属于块级作用域变量的声明，只能在当前声明的块级作用域内或当前声明
  *   的子级的块级作用域访问
  */

// 实际的例子
// var arr = [];
//
// function fn () {
//     for (var i = 0; i < 5; i++) {
//         /**
//          * 用var声明的变量是属于整个函数级别作用域fn的
//          * 这里打印的值永远都是for循环结束之后运行的结果5
//          * 要想解决这个问题用let声明就可以，先用传统的办法解决下，如下：
//          */
//          arr.push(function () {
//              console.log(i);
//          });
//
//         arr.push((function (i) {
//             return function () {
//                 console.log(i);
//             }
//         })(i));
//     }
// }
//
// fn ();
// arr[0]();

var arr = [];

function fn() {
    for (let i = 0; i < 5; i++) {
        arr.push(function (){
            console.log(i);
        });
    }
}

fn ();
arr[3]();
